package com.glodon.zhuanli.common.dto;

import com.google.common.collect.Maps;
import com.glodon.framework.common.util.support.DTOCallbackHandler;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;

import java.util.Map;

/**
 * 对待转换的实体中的boolean类型进行转换
 */
public class DTOCallbackHandlerWithBoolean implements DTOCallbackHandler {

    private Map<String , Boolean> booleanFieldMap = Maps.newHashMap() ;

    /**
     * 添加需要在进行boolean转换的字段
     * @param propertyName
     * @param defaultValue
     */
    public void addBooleanProperty(String propertyName , boolean defaultValue){
        Assert.isTrue( StringUtils.isNotBlank(propertyName) , "boolean属性名称不能为空。" );

        booleanFieldMap.put(propertyName , defaultValue) ;
    }

    /**
     * 进行数字转换的处理
     * @param dtoMap
     */
    @Override
    public void doHandler(Map<String, Object> dtoMap) {

        //便利需要数字格式化的字段，进行格式化
        for (Map.Entry<String, Boolean> propertyFormat : booleanFieldMap.entrySet()) {
            Boolean flag = true ;

            Object value = dtoMap.get(propertyFormat.getKey()) ;

            //如果value值为空或不是boolean类型，则去默认的boolean值
            if( value == null || !(value instanceof Boolean) ){
                flag = propertyFormat.getValue() ;
            }else{
                flag = (Boolean) value ;
            }

            //设置flag的值
            dtoMap.put(propertyFormat.getKey() , flag!=null && flag ? "是" : "否" ) ;
        }

    }

}
